function quickSort(arr) {
    // 辅助函数，用于交换数组中两个元素的位置
    function swap(array, i, j) {
        let temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }

    // 辅助函数，用于分区操作
    function partition(array, low, high) {
        let pivot = array[high]; // 选择最右边的元素作为基准
        let i = low - 1; // 较小元素的索引

        for (let j = low; j < high; j++) {
            // 如果当前元素小于或等于基准
            if (array[j] <= pivot) {
                i++; // 增加较小元素的索引
                swap(array, i, j); // 交换元素，使得较小元素在左边
            }
        }
        swap(array, i + 1, high); // 把基准元素放到正确的位置
        return i + 1; // 返回基准的索引
    }

    // 主函数，实现快速排序
    function quickSortRecursive(array, low, high) {
        if (low < high) {
            // pi 是分区索引，array[pi] 已经在正确位置
            let pi = partition(array, low, high);

            // 分别对基准前后的子数组进行递归排序
            quickSortRecursive(array, low, pi - 1);
            quickSortRecursive(array, pi + 1, high);
        }
    }

    // 调用递归函数进行排序
    quickSortRecursive(arr, 0, arr.length - 1);
    return arr;
}

// 示例用法
let array = [10, 7, 8, 9, 1, 5];
console.log("排序前:", array);
let sortedArray = quickSort(array);
console.log("排序后:", sortedArray);